import requests
from lxml import etree
import time

# 网站URL
url = 'https://www.gzpyp.edu.cn/'

# 发送请求获取网页内容
try:
    # 添加请求头以模拟浏览器
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36'
    }
    response = requests.get(url, headers=headers, timeout=10)
    response.raise_for_status()  # 检查请求是否成功
    
    # 解析HTML内容
    html = etree.HTML(response.text)
    
    # 使用指定的XPath路径提取元素
    specific_xpath = '/html/body/div[1]/div[2]/div/div[3]/div[1]/ul/li'
    
    # 尝试精确XPath，获取所有匹配的li元素
    elements = html.xpath(specific_xpath)
    
    # 检查是否找到元素
    if elements:
        print(f"找到 {len(elements)} 个小标题元素")
        print("\n爬取的小标题列表:")
        print("=" * 50)
        
        # 遍历所有找到的元素
        for i, element in enumerate(elements, 1):
            # 获取元素的完整文本，包括子元素中的文本
            text = ''.join(element.itertext()).strip()
            print(f"{i}. {text}")
        
        print("=" * 50)
        print(f"总计爬取到 {len(elements)} 个小标题\n")
    else:
        print("未找到指定的元素，尝试使用更通用的XPath来查找可能的标题元素...")
        
        # 尝试查找页面中的其他可能的标题元素
        possible_titles = html.xpath('//div[contains(@class, "news")]//li[2]//text()')
        if possible_titles:
            print(f"找到的可能标题元素: {''.join(possible_titles).strip()}")
        else:
            print("无法找到相关标题元素，可能网页结构已更改或需要调整XPath")
            
except requests.RequestException as e:
    print(f"请求异常: {e}")
except Exception as e:
    print(f"发生错误: {e}")
    import traceback
    traceback.print_exc()